package ex2.LinkedBinaryTree;

import week6.LinkedBinaryTree;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class DecisionTree
{
    private LinkedBinaryTree<String> tree;

    public DecisionTree(String filename) throws FileNotFoundException
    {
        File inputFile = new File(filename);
        Scanner scan = new Scanner(inputFile);
        int numberNodes = scan.nextInt();
        scan.nextLine();
        int root = 0, left, right;

        List<LinkedBinaryTree<String>> nodes = new ArrayList<LinkedBinaryTree<String>>();
        for (int i = 0; i < numberNodes; i++)
            nodes.add(i,new LinkedBinaryTree<String>(scan.nextLine()));

        while (scan.hasNext())
        {
            root = scan.nextInt();
            left = scan.nextInt();
            right = scan.nextInt();
            scan.nextLine();

            nodes.set(root, new LinkedBinaryTree<String>((nodes.get(root)).getRootElement(),
                    nodes.get(left), nodes.get(right)));
        }
        tree = nodes.get(root);
    }

    /**
     *  Follows the decision tree based on user responses.
     */
    public void evaluate()
    {
        LinkedBinaryTree<String> current = tree;
        Scanner scan = new Scanner(System.in);

        while (current.size() > 1)
        {
            System.out.println (current.getRootElement());
            if (scan.nextLine().equalsIgnoreCase("N"))
                current = current.getLeft();
            else
                current = current.getRight();
        }

        System.out.println (current.getRootElement());
    }

    private static int count = 0;
    public int CountLeaf ()
    {
        count = 0;
        CountLeaf(tree);
        return count;
    }


    private void CountLeaf(LinkedBinaryTree<String> tree)
    {
        if (!(tree == null))
        {
            if ((tree.getLeft() == null) && (tree.getRight() == null))
            {
                count++;
            }

            CountLeaf(tree.getLeft());
            CountLeaf(tree.getRight());
        }
    }

    public int hight()
    {
        int a = tree.getHeight();
        return a;
    }

    public void leveltoString()
    {
        tree.LevelOrderToString();
    }

    public void leveltoString2()
    {
        tree.LevelOrderToString2();
    }

}